package com.cskaoyan.javase.oop1._8static._0introduction;

/**
 * @description: static关键字的引入
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 练习：
 * 	创建一个学生类，用来描述我们班全体同学，要求
 * 		属性：姓名，性别，年龄，学号，学校信息
 * 		行为：吃饭，学习
 *
 *
 * > 显然，我们会发现以下问题
 * 1. 无论创建多少Student对象，由于该类描述的是我们班全体同学，他们的班级信息实际上是一样的
 * 2. 创建多次对象，需要重复的给一个属性赋相同的值，这是很麻烦的，不方便的
 * 3. 学校信息这个属性实质上应该是被全体同学所共有的属性，而不是独属于某个对象的
 *
 * 可以考虑写死构造器或者直接显式赋值,但是这样有一定的问题
 *      1,这个学校信息如果是对象的成员变量,每个对象当中都有一个,但是实际上没有必要,这样就浪费空间
 *      2,学校信息这种属于集体的信息,不应该是某位童鞋独有的,而应该是全体对象共有的,共享的
 * 为了解决以上两个问题,引入了static关键字
 * 所以static关键字的作用是: 全体对象共享
 *
 */
public class Demo {
    public static void main(String[] args) {
        //创建对象,既然是我们班的童鞋,那么他们的学校信息应该都是一样的,比如都是"王道训练营"
        Student s = new Student("法外狂徒-张三", "男", 13, 10, "王道训练营");
        Student s2 = new Student("李四", "女", 18, 12, "王道训练营");

    }
}

class Student {
    String name;
    String gender;
    int age;
    int stuId;
    String schoolName;

    public void eat() {
        System.out.println("吃饭了");
    }

    public void study() {
        System.out.println("学习了");
    }

    public Student() {
    }

    public Student(String name, String gender, int age, int stuId, String schoolName) {
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.stuId = stuId;
        this.schoolName = schoolName;
    }
}
